package cn.haixiang.feignclient;

import cn.haixiang.domain.User;


import cn.haixiang.fallback.UserServiceFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @BelongsProject: java0806-springcloud-netflix
 * @BelongsPackage: cn.itsource.cn.itsource.feign
 * @Author: shezhan
 * @CreateTime: 2022-12-19  09:30
 * @Description: name：服务名称  path：接口的前缀路径
 * @Version: 1.0
 *
 * 在启动时，我们的@EnableFeignClients会去扫描同级以及同级包下所有类看是否
 *  加了@FeignClient，如果加了那么就会使用动态代理给当前feign接口生成实现类
 *  那么在实现类的方法中其实就是使用了resttemplate+ribbon实现的接口调用
 *  那么其实我们在使用feign接口的时候调用的就是feign接口的实现类
 *  contextId
 *
 */
@FeignClient(name = "user-service", path = "user", contextId = "userService", fallbackFactory = UserServiceFallbackFactory.class)
public interface UserService {

    /*
     * @Description: 以后你要调用谁，你就直接去CV你要调用的controller接口方法就完事了
     * @Author: shezhan
     * @Date: 2022/12/19 9:33
     * @param id:
     * @return: cn.itsource.domain.User
     *
     * 规则：
     *  1.参数要跟接口保持一致
     *  2.路径要跟接口保持一致
     *  3.返回值类型要跟接口保持一致
     *  保证三个一致，坚持CV原则
     *
     **/
    @GetMapping("/{id}")
    User getUser(@PathVariable("id") Long id);


}